Systems and methods for managing releases of global services in a controlled manner

ABSTRACT

Described herein are systems and methods for managing releases of global services in a controlled manner. A computing environment may include a first release of a global service, a second release of the global service, and a manager service. The first and second release may be enabled and disabled. The first release may be enabled and the second release may be disabled. The second release may be ready for use in the computing environment after passing one or more checks. A manager service may enable use of the second release in the computing environment. The manager service may disable use of (but maintain execution of) the first release in the computing environment. The second release may be determined to have one or more issues. Responsive to determining the second release has issue(s), the manager service may disable use of the second release and re-enable use of the first release.

CROSS-REFERENCE TO RELATED APPLICATION

This application is a continuation of and claims priority to and thebenefit of U.S. patent application Ser. No. 16/053,563, titled “SYSTEMSAND METHODS FOR MANAGING RELEASES OF GLOBAL SERVICES IN A CONTROLLEDMANNER,” and filed on Aug. 2, 2018, the contents of all of which arehereby incorporated herein by reference in its entirety for allpurposes.

FIELD OF THE DISCLOSURE

The present application generally relates to deployment of new softwarecode, including but not limited to systems and methods for managingreleases of global services in a controlled manner.

BACKGROUND

Alpha/Beta (AB) testing is a tool which allows for rollout of new codein a controlled and reliable manner. Deployment failures of the new codemay result in downtime. To address the deployment failures, systemsgenerally are rolled back to an older version of the code.

BRIEF SUMMARY

This summary is provided to introduce a selection of concepts in asimplified form that are further described below in the DetailedDescription. This summary is not intended to identify key features oressential features, nor is it intended to limit the scope of the claimsincluded herewith.

In one aspect, the present disclosure is directed to a method formanaging releases of global services in a controlled manner. The methodmay include deploying in a computing environment a second release of aglobal service in a disabled state. The computing environment mayinclude a first release of the global service which is enabled and inuse. Each of the first release of the global service and the secondrelease of the global service may be configured to be enabled anddisabled. The method may include identifying that the second release ofthe global service has passed one or more checks and is ready to beenabled for use in the computing environment. The method may includeenabling, by a manager service, use of the second release of the globalservice in the computing environment. The method may include disabling,by the manager service, use of the first release of the global servicein the computing environment while maintaining execution of the firstrelease of the global service in the computing environment. The methodmay include determining that the second release of the global servicehas one or more issues and is to be disabled. The method may includedisabling, by the manager service, use of the second release of theglobal service in the computing environment and re-enabling use of thefirst release of the global service.

In some embodiments, the computing environment includes a cloud basedcomputing environment. In some embodiments, the second release of theglobal service includes one of maintenance fixes or enhancements to thefirst release of the global service. In some embodiments, one of thefirst release of the global service and the second release of the globalservice is not configured to receive any application programminginterface (API) calls other than from the manager service.

In some embodiments, the method further includes registering, by one ofthe first release of the global service or the second release of theglobal service, with the manager service. In some embodiments, themethod further includes polling, by the first release of the globalservice or the second release of the global service, the manager servicefor one of an enable or disable command.

In some embodiments, disabling use of the second release of the globalservice in the computing environment and re-enabling use of the firstrelease of the global service further comprises maintaining the disabledsecond release of the global service executing and idle in the computingenvironment. In some embodiments, one or more non-global servicesexecuting in the computing environment continue to process user requestsreceived when the first release of the global service was enabled.

In some embodiments, determining that the second release of the globalservice has one or more issues and is to be disabled further includesdetermining that the global service is to be rolled back to the firstrelease of the global service from the second release of the globalservice. In some embodiments, the manager service disables the firstrelease of the global service responsive to enabling the second releaseof the global service.

In another aspect, the present disclosure is directed to a system formanaging releases of global services in a controlled manner. The systemmay include a computing environment including a first release of aglobal service and a second release of the global service. Each of thefirst release of the global service and the second release of the globalservice may be configured to be enabled and disabled. The first releaseof the global service may be enabled and in use and the second releaseof the global service is disabled. The second release of the globalservice may be configured to be ready to be enabled for use in thecomputing environment responsive to passing one or more checks. Thesystem may include a manager service executable in the computingenvironment. The manager service may be configured to enable use of thesecond release of the global service in the computing environment anddisable use of the first release of the global service in the computingenvironment. Execution of the first release of the global service may bemaintained in the computing environment. The second release of theglobal service may be determined to have one or more issues. The managerservice may be configured to disable use of the second release of theglobal service in the computing environment and re-enable use of thefirst release of the global service.

In some embodiments, the computing environment includes a cloud basedcomputing environment. In some embodiments, the second release of theglobal service includes one of maintenance fixes or enhancements to thefirst release of the global service. In some embodiments, one of thefirst release of the global service and the second release of the globalservice is not configured to receive any application programminginterface (API) calls other than from the manager service.

In some embodiments, one of the first release of the global service orthe second release of the global service is further configured toregister with the manager service. In some embodiments, one of the firstrelease of the global service or the second release of the globalservice is further configured to loop poll the manager service for oneof an enable or disable command.

In some embodiments, the disabled second release of the global serviceis maintained executing and idle in the computing environment. In someembodiments, one or more non-global services are configured in thecomputing environment to continue to process user requests received whenthe first release of the global service was enabled.

In some embodiments, the manager service is further configured torollback the global service to the first release from the secondrelease. In some embodiments, the manager service is further configuredto disable the first release of the global service responsive toenabling the second release of the global service.

BRIEF DESCRIPTION OF THE DRAWING FIGURES

Objects, aspects, features, and advantages of embodiments disclosedherein will become more fully apparent from the following detaileddescription, the appended claims, and the accompanying drawing figuresin which like reference numerals identify similar or identical elements.Reference numerals that are introduced in the specification inassociation with a drawing figure may be repeated in one or moresubsequent figures without additional description in the specificationin order to provide context for other features, and not every elementmay be labeled in every figure. The drawing figures are not necessarilyto scale, emphasis instead being placed upon illustrating embodiments,principles and concepts. The drawings are not intended to limit thescope of the claims included herewith.

FIG. 1A is a block diagram of a network computing system, in accordancewith an illustrative embodiment;

FIG. 1B is a block diagram of a network computing system for deliveringa computing environment from a server to a client via an appliance, inaccordance with an illustrative embodiment;

FIG. 1C is a block diagram of a computing device, in accordance with anillustrative embodiment;

FIG. 2 is a block diagram of an appliance for processing communicationsbetween a client and a server, in accordance with an illustrativeembodiment;

FIG. 3 is a block diagram of a virtualization environment, in accordancewith an illustrative embodiment;

FIG. 4 is a block diagram of a cluster system, in accordance with anillustrative embodiment;

FIG. 5 is a block diagram of one embodiment of a system for managingreleases of global services in a controlled manner;

FIG. 6 is a block diagram of one example of a computing environmenthaving releases of global services switching between enabled todisabled; and

FIG. 7 is a flow diagram of one example embodiment of a method formanaging releases of global services in a controlled manner.

DETAILED DESCRIPTION

For purposes of reading the description of the various embodimentsbelow, the following descriptions of the sections of the specificationand their respective contents may be helpful:

Section A describes a network environment and computing environmentwhich may be useful for practicing embodiments described herein;

Section B describes embodiments of systems and methods for delivering acomputing environment to a remote user;

Section C describes embodiments of systems and methods for virtualizingan application delivery controller;

Section D describes embodiments of systems and methods for providing aclustered appliance architecture environment; and

Section E describes embodiments of systems and methods for managingreleases of global services in a controlled manner.

A. Network and Computing Environment

Referring to FIG. 1A, an illustrative network environment 100 isdepicted. Network environment 100 may include one or more clients102(1)-102(n) (also generally referred to as local machine(s) 102 orclient(s) 102) in communication with one or more servers 106(1)-106(n)(also generally referred to as remote machine(s) 106 or server(s) 106)via one or more networks 104(1)-104 n (generally referred to asnetwork(s) 104). In some embodiments, a client 102 may communicate witha server 106 via one or more appliances 200(1)-200 n (generally referredto as appliance(s) 200 or gateway(s) 200).

Although the embodiment shown in FIG. 1A shows one or more networks 104between clients 102 and servers 106, in other embodiments, clients 102and servers 106 may be on the same network 104. The various networks 104may be the same type of network or different types of networks. Forexample, in some embodiments, network 104(1) may be a private networksuch as a local area network (LAN) or a company Intranet, while network104(2) and/or network 104(n) may be a public network, such as a widearea network (WAN) or the Internet. In other embodiments, both network104(1) and network 104(n) may be private networks. Networks 104 mayemploy one or more types of physical networks and/or network topologies,such as wired and/or wireless networks, and may employ one or morecommunication transport protocols, such as transmission control protocol(TCP), internet protocol (IP), user datagram protocol (UDP) or othersimilar protocols.

As shown in FIG. 1A, one or more appliances 200 may be located atvarious points or in various communication paths of network environment100. For example, appliance 200 may be deployed between two networks104(1) and 104(2), and appliances 200 may communicate with one anotherto work in conjunction to, for example, accelerate network trafficbetween clients 102 and servers 106. In other embodiments, the appliance200 may be located on a network 104. For example, appliance 200 may beimplemented as part of one of clients 102 and/or servers 106. In anembodiment, appliance 200 may be implemented as a network device such asNetScaler® products sold by Citrix Systems, Inc. of Fort Lauderdale,Fla.

As shown in FIG. 1A, one or more servers 106 may operate as a serverfarm 38. Servers 106 of server farm 38 may be logically grouped, and mayeither be geographically co-located (e.g., on premises) orgeographically dispersed (e.g., cloud based) from clients 102 and/orother servers 106. In an embodiment, server farm 38 executes one or moreapplications on behalf of one or more of clients 102 (e.g., as anapplication server), although other uses are possible, such as a fileserver, gateway server, proxy server, or other similar server uses.Clients 102 may seek access to hosted applications on servers 106.

As shown in FIG. 1A, in some embodiments, appliances 200 may include, bereplaced by, or be in communication with, one or more additionalappliances, such as WAN optimization appliances 205(1)-205(n), referredto generally as WAN optimization appliance(s) 205. For example, WANoptimization appliance 205 may accelerate, cache, compress or otherwiseoptimize or improve performance, operation, flow control, or quality ofservice of network traffic, such as traffic to and/or from a WANconnection, such as optimizing Wide Area File Services (WAFS),accelerating Server Message Block (SMB) or Common Internet File System(CIFS). In some embodiments, appliance 205 may be a performanceenhancing proxy or a WAN optimization controller. In one embodiment,appliance 205 may be implemented as CloudBridge® products sold by CitrixSystems, Inc. of Fort Lauderdale, Fla.

Referring to FIG. 1B, an example network environment, 100′, fordelivering and/or operating a computing network environment on a client102 is shown. As shown in FIG. 1B, a server 106 may include anapplication delivery system 190 for delivering a computing environment,application, and/or data files to one or more clients 102. Client 102may include client agent 120 and computing environment 15. Computingenvironment 15 may execute or operate an application, 16, that accesses,processes or uses a data file 17. Computing environment 15, application16 and/or data file 17 may be delivered to the client 102 via appliance200 and/or the server 106.

Appliance 200 may accelerate delivery of all or a portion of computingenvironment 15 to a client 102, for example by the application deliverysystem 190. For example, appliance 200 may accelerate delivery of astreaming application and data file processable by the application froma data center to a remote user location by accelerating transport layertraffic between a client 102 and a server 106. Such acceleration may beprovided by one or more techniques, such as: 1) transport layerconnection pooling, 2) transport layer connection multiplexing, 3)transport control protocol buffering, 4) compression, 5) caching, orother techniques. Appliance 200 may also provide load balancing ofservers 106 to process requests from clients 102, act as a proxy oraccess server to provide access to the one or more servers 106, providesecurity and/or act as a firewall between a client 102 and a server 106,provide Domain Name Service (DNS) resolution, provide one or morevirtual servers or virtual internet protocol servers, and/or provide asecure virtual private network (VPN) connection from a client 102 to aserver 106, such as a secure socket layer (SSL) VPN connection and/orprovide encryption and decryption operations.

Application delivery management system 190 may deliver computingenvironment 15 to a user (e.g., client 102), remote or otherwise, basedon authentication and authorization policies applied by policy engine195. A remote user may obtain a computing environment and access toserver stored applications and data files from any network-connecteddevice (e.g., client 102). For example, appliance 200 may request anapplication and data file from server 106. In response to the request,application delivery system 190 and/or server 106 may deliver theapplication and data file to client 102, for example via an applicationstream to operate in computing environment 15 on client 102, or via aremote-display protocol or otherwise via remote-based or server-basedcomputing. In an embodiment, application delivery system 190 may beimplemented as any portion of the Citrix Workspace Suite™ by CitrixSystems, Inc., such as XenApp® or XenDesktop®.

Policy engine 195 may control and manage the access to, and executionand delivery of, applications. For example, policy engine 195 maydetermine the one or more applications a user or client 102 may accessand/or how the application should be delivered to the user or client102, such as a server-based computing, streaming or delivering theapplication locally to the client 50 for local execution.

For example, in operation, a client 102 may request execution of anapplication (e.g., application 16′) and application delivery system 190of server 106 determines how to execute application 16′, for examplebased upon credentials received from client 102 and a user policyapplied by policy engine 195 associated with the credentials. Forexample, application delivery system 190 may enable client 102 toreceive application-output data generated by execution of theapplication on a server 106, may enable client 102 to execute theapplication locally after receiving the application from server 106, ormay stream the application via network 104 to client 102. For example,in some embodiments, the application may be a server-based or aremote-based application executed on server 106 on behalf of client 102.Server 106 may display output to client 102 using a thin-client orremote-display protocol, such as the Independent Computing Architecture(ICA) protocol by Citrix Systems, Inc. of Fort Lauderdale, Fla. Theapplication may be any application related to real-time datacommunications, such as applications for streaming graphics, streamingvideo and/or audio or other data, delivery of remote desktops orworkspaces or hosted services or applications, for exampleinfrastructure as a service (IaaS), workspace as a service (WaaS),software as a service (SaaS) or platform as a service (PaaS).

One or more of servers 106 may include a performance monitoring serviceor agent 197. In some embodiments, a dedicated one or more servers 106may be employed to perform performance monitoring. Performancemonitoring may be performed using data collection, aggregation,analysis, management and reporting, for example by software, hardware ora combination thereof. Performance monitoring may include one or moreagents for performing monitoring, measurement and data collectionactivities on clients 102 (e.g., client agent 120), servers 106 (e.g.,agent 197) or an appliances 200 and/or 205 (agent not shown). Ingeneral, monitoring agents (e.g., 120 and/or 197) execute transparently(e.g., in the background) to any application and/or user of the device.In some embodiments, monitoring agent 197 includes any of the productembodiments referred to as EdgeSight by Citrix Systems, Inc. of FortLauderdale, Fla.

The monitoring agents 120 and 197 may monitor, measure, collect, and/oranalyze data on a predetermined frequency, based upon an occurrence ofgiven event(s), or in real time during operation of network environment100. The monitoring agents may monitor resource consumption and/orperformance of hardware, software, and/or communications resources ofclients 102, networks 104, appliances 200 and/or 205, and/or servers106. For example, network connections such as a transport layerconnection, network latency, bandwidth utilization, end-user responsetimes, application usage and performance, session connections to anapplication, cache usage, memory usage, processor usage, storage usage,database transactions, client and/or server utilization, active users,duration of user activity, application crashes, errors, or hangs, thetime required to log-in to an application, a server, or the applicationdelivery system, and/or other performance conditions and metrics may bemonitored.

The monitoring agents 120 and 197 may provide application performancemanagement for application delivery system 190. For example, based uponone or more monitored performance conditions or metrics, applicationdelivery system 190 may be dynamically adjusted, for exampleperiodically or in real-time, to optimize application delivery byservers 106 to clients 102 based upon network environment performanceand conditions.

In described embodiments, clients 102, servers 106, and appliances 200and 205 may be deployed as and/or executed on any type and form ofcomputing device, such as any desktop computer, laptop computer, ormobile device capable of communication over at least one network andperforming the operations described herein. For example, clients 102,servers 106 and/or appliances 200 and 205 may each correspond to onecomputer, a plurality of computers, or a network of distributedcomputers such as computer 101 shown in FIG. 1C.

As shown in FIG. 1C, computer 101 may include one or more processors103, volatile memory 122 (e.g., RAM), non-volatile memory 128 (e.g., oneor more hard disk drives (HDDs) or other magnetic or optical storagemedia, one or more solid state drives (SSDs) such as a flash drive orother solid state storage media, one or more hybrid magnetic and solidstate drives, and/or one or more virtual storage volumes, such as acloud storage, or a combination of such physical storage volumes andvirtual storage volumes or arrays thereof), user interface (UI) 123, oneor more communications interfaces 118, and communication bus 150. Userinterface 123 may include graphical user interface (GUI) 124 (e.g., atouchscreen, a display, etc.) and one or more input/output (I/O) devices126 (e.g., a mouse, a keyboard, etc.). Non-volatile memory 128 storesoperating system 115, one or more applications 116, and data 117 suchthat, for example, computer instructions of operating system 115 and/orapplications 116 are executed by processor(s) 103 out of volatile memory122. Data may be entered using an input device of GUI 124 or receivedfrom I/O device(s) 126. Various elements of computer 101 may communicatevia communication bus 150. Computer 101 as shown in FIG. 1C is shownmerely as an example, as clients 102, servers 106 and/or appliances 200and 205 may be implemented by any computing or processing environmentand with any type of machine or set of machines that may have suitablehardware and/or software capable of operating as described herein.

Processor(s) 103 may be implemented by one or more programmableprocessors executing one or more computer programs to perform thefunctions of the system. As used herein, the term “processor” describesan electronic circuit that performs a function, an operation, or asequence of operations. The function, operation, or sequence ofoperations may be hard coded into the electronic circuit or soft codedby way of instructions held in a memory device. A “processor” mayperform the function, operation, or sequence of operations using digitalvalues or using analog signals. In some embodiments, the “processor” canbe embodied in one or more application specific integrated circuits(ASICs), microprocessors, digital signal processors, microcontrollers,field programmable gate arrays (FPGAs), programmable logic arrays(PLAs), multi-core processors, or general-purpose computers withassociated memory. The “processor” may be analog, digital ormixed-signal. In some embodiments, the “processor” may be one or morephysical processors or one or more “virtual” (e.g., remotely located or“cloud”) processors.

Communications interfaces 118 may include one or more interfaces toenable computer 101 to access a computer network such as a LAN, a WAN,or the Internet through a variety of wired and/or wireless or cellularconnections.

In described embodiments, a first computing device 101 may execute anapplication on behalf of a user of a client computing device (e.g., aclient 102), may execute a virtual machine, which provides an executionsession within which applications execute on behalf of a user or aclient computing device (e.g., a client 102), such as a hosted desktopsession, may execute a terminal services session to provide a hosteddesktop environment, or may provide access to a computing environmentincluding one or more of: one or more applications, one or more desktopapplications, and one or more desktop sessions in which one or moreapplications may execute.

Additional details of the implementation and operation of networkenvironment 100, clients 102, servers 106, and appliances 200 and 205may be as described in U.S. Pat. No. 9,538,345, issued Jan. 3, 2017 toCitrix Systems, Inc. of Fort Lauderdale, Fla., the teachings of whichare hereby incorporated herein by reference.

B. Appliance Architecture

FIG. 2 shows an example embodiment of appliance 200. As describedherein, appliance 200 may be implemented as a server, gateway, router,switch, bridge or other type of computing or network device. As shown inFIG. 2 , an embodiment of appliance 200 may include a hardware layer 206and a software layer 205 divided into a user space 202 and a kernelspace 204. Hardware layer 206 provides the hardware elements upon whichprograms and services within kernel space 204 and user space 202 areexecuted and allow programs and services within kernel space 204 anduser space 202 to communicate data both internally and externally withrespect to appliance 200. As shown in FIG. 2 , hardware layer 206 mayinclude one or more processing units 262 for executing software programsand services, memory 264 for storing software and data, network ports266 for transmitting and receiving data over a network, and encryptionprocessor 260 for encrypting and decrypting data such as in relation toSecure Socket Layer (SSL) or Transport Layer Security (TLS) processingof data transmitted and received over the network.

An operating system of appliance 200 allocates, manages, or otherwisesegregates the available system memory into kernel space 204 and userspace 202. Kernel space 204 is reserved for running kernel 230,including any device drivers, kernel extensions or other kernel relatedsoftware. As known to those skilled in the art, kernel 230 is the coreof the operating system, and provides access, control, and management ofresources and hardware-related elements of application. Kernel space 204may also include a number of network services or processes working inconjunction with cache manager 232.

Appliance 200 may include one or more network stacks 267, such as aTCP/IP based stack, for communicating with client(s) 102, server(s) 106,network(s) 104, and/or other appliances 200 or 205. For example,appliance 200 may establish and/or terminate one or more transport layerconnections between clients 102 and servers 106. Each network stack 267may include a buffer for queuing one or more network packets fortransmission by appliance 200.

Kernel space 204 may include cache manager 232, packet engine 240,encryption engine 234, policy engine 236 and compression engine 238. Inother words, one or more of processes 232, 240, 234, 236 and 238 run inthe core address space of the operating system of appliance 200, whichmay reduce the number of data transactions to and from the memory and/orcontext switches between kernel mode and user mode, for example sincedata obtained in kernel mode may not need to be passed or copied to auser process, thread or user level data structure.

Cache manager 232 may duplicate original data stored elsewhere or datapreviously computed, generated or transmitted to reduce the access timeof the data. In some embodiments, the cache manager 232 may be a dataobject in memory 264 of appliance 200, or may be a physical memoryhaving a faster access time than memory 264.

Policy engine 236 may include a statistical engine or otherconfiguration mechanism to allow a user to identify, specify, define orconfigure a caching policy and access, control and management ofobjects, data or content being cached by appliance 200, and define orconfigure security, network traffic, network access, compression orother functions performed by appliance 200.

Encryption engine 234 may process any security related protocol, such asSSL or TLS. For example, encryption engine 234 may encrypt and decryptnetwork packets, or any portion thereof, communicated via appliance 200,may setup or establish SSL, TLS or other secure connections, for examplebetween client 102, server 106, and/or other appliances 200 or 205. Insome embodiments, encryption engine 234 may use a tunneling protocol toprovide a VPN between a client 102 and a server 106. In someembodiments, encryption engine 234 is in communication with encryptionprocessor 260. Compression engine 238 compresses network packetsbi-directionally between clients 102 and servers 106 and/or between oneor more appliances 200.

Packet engine 240 may manage kernel-level processing of packets receivedand transmitted by appliance 200 via network stacks 267 to send andreceive network packets via network ports 266. Packet engine 240 mayoperate in conjunction with encryption engine 234, cache manager 232,policy engine 236 and compression engine 238, for example to performencryption/decryption, traffic management such as request-level contentswitching and request-level cache redirection, and compression anddecompression of data.

User space 202 is a memory area or portion of the operating system usedby user mode applications or programs otherwise running in user mode. Auser mode application may not access kernel space 204 directly and usesservice calls in order to access kernel services. User space 202 mayinclude graphical user interface (GUI) 210, a command line interface(CLI) 212, shell services 214, health monitor 216, and daemon services218. GUI 210 and CLI 212 enable a system administrator or other user tointeract with and control the operation of appliance 200, such as viathe operating system of appliance 200. Shell services 214 includeprograms, services, tasks, processes or executable instructions tosupport interaction with appliance 200 by a user via the GUI 210 and/orCLI 212.

Health monitor 216 monitors, checks, reports and ensures that networksystems are functioning properly and that users are receiving requestedcontent over a network, for example by monitoring activity of appliance200. In some embodiments, health monitor 216 intercepts and inspects anynetwork traffic passed via appliance 200. For example, health monitor216 may interface with one or more of encryption engine 234, cachemanager 232, policy engine 236, compression engine 238, packet engine240, daemon services 218, and shell services 214 to determine a state,status, operating condition, or health of any portion of the appliance200. Further, health monitor 216 may determine whether a program,process, service or task is active and currently running, check status,error or history logs provided by any program, process, service or taskto determine any condition, status or error with any portion ofappliance 200. Additionally, health monitor 216 may measure and monitorthe performance of any application, program, process, service, task orthread executing on appliance 200.

Daemon services 218 are programs that run continuously or in thebackground and handle periodic service requests received by appliance200. In some embodiments, a daemon service may forward the requests toother programs or processes, such as another daemon service 218 asappropriate.

As described herein, appliance 200 may relieve servers 106 of much ofthe processing load caused by repeatedly opening and closing transportlayers connections to clients 102 by opening one or more transport layerconnections with each server 106 and maintaining these connections toallow repeated data accesses by clients via the Internet (e.g.,“connection pooling”). To perform connection pooling, appliance 200 maytranslate or multiplex communications by modifying sequence numbers andacknowledgment numbers at the transport layer protocol level (e.g.,“connection multiplexing”). Appliance 200 may also provide switching orload balancing for communications between the client 102 and server 106.

As described herein, each client 102 may include client agent 120 forestablishing and exchanging communications with appliance 200 and/orserver 106 via a network 104. Client 102 may have installed and/orexecute one or more applications that are in communication with network104. Client agent 120 may intercept network communications from anetwork stack used by the one or more applications. For example, clientagent 120 may intercept a network communication at any point in anetwork stack and redirect the network communication to a destinationdesired, managed or controlled by client agent 120, for example tointercept and redirect a transport layer connection to an IP address andport controlled or managed by client agent 120. Thus, client agent 120may transparently intercept any protocol layer below the transportlayer, such as the network layer, and any protocol layer above thetransport layer, such as the session, presentation or applicationlayers. Client agent 120 can interface with the transport layer tosecure, optimize, accelerate, route or load-balance any communicationsprovided via any protocol carried by the transport layer.

In some embodiments, client agent 120 is implemented as an IndependentComputing Architecture (ICA) client developed by Citrix Systems, Inc. ofFort Lauderdale, Fla. Client agent 120 may perform acceleration,streaming, monitoring, and/or other operations. For example, clientagent 120 may accelerate streaming an application from a server 106 to aclient 102. Client agent 120 may also perform end-pointdetection/scanning and collect end-point information about client 102for appliance 200 and/or server 106. Appliance 200 and/or server 106 mayuse the collected information to determine and provide access,authentication and authorization control of the client's connection tonetwork 104. For example, client agent 120 may identify and determineone or more client-side attributes, such as: the operating system and/ora version of an operating system, a service pack of the operatingsystem, a running service, a running process, a file, presence orversions of various applications of the client, such as antivirus,firewall, security, and/or other software.

Additional details of the implementation and operation of appliance 200may be as described in U.S. Pat. No. 9,538,345, issued Jan. 3, 2017 toCitrix Systems, Inc. of Fort Lauderdale, Fla., the teachings of whichare hereby incorporated herein by reference.

C. Systems and Methods for Providing Virtualized Application DeliveryController

Referring now to FIG. 3 , a block diagram of a virtualized environment300 is shown. As shown, a computing device 302 in virtualizedenvironment 300 includes a virtualization layer 303, a hypervisor layer304, and a hardware layer 307. Hypervisor layer 304 includes one or morehypervisors (or virtualization managers) 301 that allocates and managesaccess to a number of physical resources in hardware layer 307 (e.g.,physical processor(s) 321 and physical disk(s) 328) by at least onevirtual machine (VM) (e.g., one of VMs 306) executing in virtualizationlayer 303. Each VM 306 may include allocated virtual resources such asvirtual processors 332 and/or virtual disks 342, as well as virtualresources such as virtual memory and virtual network interfaces. In someembodiments, at least one of VMs 306 may include a control operatingsystem (e.g., 305) in communication with hypervisor 301 and used toexecute applications for managing and configuring other VMs (e.g., guestoperating systems 310) on device 302.

In general, hypervisor(s) 301 may provide virtual resources to anoperating system of VMs 306 in any manner that simulates the operatingsystem having access to a physical device. Thus, hypervisor(s) 301 maybe used to emulate virtual hardware, partition physical hardware,virtualize physical hardware, and execute virtual machines that provideaccess to computing environments. In an illustrative embodiment,hypervisor(s) 301 may be implemented as a XEN hypervisor, for example asprovided by the open source Xen.org community. In an illustrativeembodiment, device 302 executing a hypervisor that creates a virtualmachine platform on which guest operating systems may execute isreferred to as a host server. In such an embodiment, device 302 may beimplemented as a XEN server as provided by Citrix Systems, Inc., of FortLauderdale, Fla.

Hypervisor 301 may create one or more VMs 306 in which an operatingsystem (e.g., control operating system 305 and/or guest operating system310) executes. For example, the hypervisor 301 loads a virtual machineimage to create VMs 306 to execute an operating system. Hypervisor 301may present VMs 306 with an abstraction of hardware layer 307, and/ormay control how physical capabilities of hardware layer 307 arepresented to VMs 306. For example, hypervisor(s) 301 may manage a poolof resources distributed across multiple physical computing devices.

In some embodiments, one of VMs 306 (e.g., the VM executing controloperating system 305) may manage and configure other of VMs 306, forexample by managing the execution and/or termination of a VM and/ormanaging allocation of virtual resources to a VM. In variousembodiments, VMs may communicate with hypervisor(s) 301 and/or other VMsvia, for example, one or more Application Programming Interfaces (APIs),shared memory, and/or other techniques.

In general, VMs 306 may provide a user of device 302 with access toresources within virtualized computing environment 300, for example, oneor more programs, applications, documents, files, desktop and/orcomputing environments, or other resources. In some embodiments, VMs 306may be implemented as fully virtualized VMs that are not aware that theyare virtual machines (e.g., a Hardware Virtual Machine or HVM). In otherembodiments, the VM may be aware that it is a virtual machine, and/orthe VM may be implemented as a paravirtualized (PV) VM.

Although shown in FIG. 3 as including a single virtualized device 302,virtualized environment 300 may include a plurality of networked devicesin a system in which at least one physical host executes a virtualmachine. A device on which a VM executes may be referred to as aphysical host and/or a host machine. For example, appliance 200 may beadditionally or alternatively implemented in a virtualized environment300 on any computing device, such as a client 102, server 106 orappliance 200. Virtual appliances may provide functionality foravailability, performance, health monitoring, caching and compression,connection multiplexing and pooling and/or security processing (e.g.,firewall, VPN, encryption/decryption, etc.), similarly as described inregard to appliance 200.

Additional details of the implementation and operation of virtualizedcomputing environment 300 may be as described in U.S. Pat. No.9,538,345, issued Jan. 3, 2017 to Citrix Systems, Inc. of FortLauderdale, Fla., the teachings of which are hereby incorporated hereinby reference.

In some embodiments, a server may execute multiple virtual machines 306,for example on various cores of a multi-core processing system and/orvarious processors of a multiple processor device. For example, althoughgenerally shown herein as “processors” (e.g., in FIGS. 1C, 2 and 3 ),one or more of the processors may be implemented as either single- ormulti-core processors to provide a multi-threaded, parallel architectureand/or multi-core architecture. Each processor and/or core may have oruse memory that is allocated or assigned for private or local use thatis only accessible by that processor/core, and/or may have or use memorythat is public or shared and accessible by multiple processors/cores.Such architectures may allow work, task, load or network trafficdistribution across one or more processors and/or one or more cores(e.g., by functional parallelism, data parallelism, flow-based dataparallelism, etc.).

Further, instead of (or in addition to) the functionality of the coresbeing implemented in the form of a physical processor/core, suchfunctionality may be implemented in a virtualized environment (e.g.,300) on a client 102, server 106 or appliance 200, such that thefunctionality may be implemented across multiple devices, such as acluster of computing devices, a server farm or network of computingdevices, etc. The various processors/cores may interface or communicatewith each other using a variety of interface techniques, such as core tocore messaging, shared memory, kernel APIs, etc.

In embodiments employing multiple processors and/or multiple processorcores, described embodiments may distribute data packets among cores orprocessors, for example to balance the flows across the cores. Forexample, packet distribution may be based upon determinations offunctions performed by each core, source and destination addresses,and/or whether: a load on the associated core is above a predeterminedthreshold; the load on the associated core is below a predeterminedthreshold; the load on the associated core is less than the load on theother cores; or any other metric that can be used to determine where toforward data packets based in part on the amount of load on a processor.

For example, data packets may be distributed among cores or processesusing receive-side scaling (RSS) in order to process packets usingmultiple processors/cores in a network. RSS generally allows packetprocessing to be balanced across multiple processors/cores whilemaintaining in-order delivery of the packets. In some embodiments, RSSmay use a hashing scheme to determine a core or processor for processinga packet.

The RSS may generate hashes from any type and form of input, such as asequence of values. This sequence of values can include any portion ofthe network packet, such as any header, field or payload of networkpacket, and include any tuples of information associated with a networkpacket or data flow, such as addresses and ports. The hash result or anyportion thereof may be used to identify a processor, core, engine, etc.,for distributing a network packet, for example via a hash table,indirection table, or other mapping technique.

Additional details of the implementation and operation of amulti-processor and/or multi-core system may be as described in U.S.Pat. No. 9,538,345, issued Jan. 3, 2017 to Citrix Systems, Inc. of FortLauderdale, Fla., the teachings of which are hereby incorporated hereinby reference.

D. Systems and Methods for Providing a Distributed Cluster Architecture

Although shown in FIGS. 1A and 1B as being single appliances, appliances200 may be implemented as one or more distributed or clusteredappliances. Individual computing devices or appliances may be referredto as nodes of the cluster. A centralized management system may performload balancing, distribution, configuration, or other tasks to allow thenodes to operate in conjunction as a single computing system. Such acluster may be viewed as a single virtual appliance or computing device.FIG. 4 shows a block diagram of an illustrative computing device clusteror appliance cluster 400. A plurality of appliances 200 or othercomputing devices (e.g., nodes) may be joined into a single cluster 400.Cluster 400 may operate as an application server, network storageserver, backup service, or any other type of computing device to performmany of the functions of appliances 200 and/or 205.

In some embodiments, each appliance 200 of cluster 400 may beimplemented as a multi-processor and/or multi-core appliance, asdescribed herein. Such embodiments may employ a two-tier distributionsystem, with one appliance if the cluster distributing packets to nodesof the cluster, and each node distributing packets for processing toprocessors/cores of the node. In many embodiments, one or more ofappliances 200 of cluster 400 may be physically grouped orgeographically proximate to one another, such as a group of bladeservers or rack mount devices in a given chassis, rack, and/or datacenter. In some embodiments, one or more of appliances 200 of cluster400 may be geographically distributed, with appliances 200 notphysically or geographically co-located. In such embodiments,geographically remote appliances may be joined by a dedicated networkconnection and/or VPN. In geographically distributed embodiments, loadbalancing may also account for communications latency betweengeographically remote appliances.

In some embodiments, cluster 400 may be considered a virtual appliance,grouped via common configuration, management, and purpose, rather thanas a physical group. For example, an appliance cluster may comprise aplurality of virtual machines or processes executed by one or moreservers.

As shown in FIG. 4 , appliance cluster 400 may be coupled to aclient-side network 104 via client data plane 402, for example totransfer data between clients 102 and appliance cluster 400. Client dataplane 402 may be implemented a switch, hub, router, or other similarnetwork device internal or external to cluster 400 to distribute trafficacross the nodes of cluster 400. For example, traffic distribution maybe performed based on equal-cost multi-path (ECMP) routing with nexthops configured with appliances or nodes of the cluster, open-shortestpath first (OSPF), stateless hash-based traffic distribution, linkaggregation (LAG) protocols, or any other type and form of flowdistribution, load balancing, and routing.

Appliance cluster 400 may be coupled to a second network 104′ via serverdata plane 404. Similarly to client data plane 402, server data plane404 may be implemented as a switch, hub, router, or other network devicethat may be internal or external to cluster 400. In some embodiments,client data plane 402 and server data plane 404 may be merged orcombined into a single device.

In some embodiments, each appliance 200 of cluster 400 may be connectedvia an internal communication network or back plane 406. Back plane 406may enable inter-node or inter-appliance control and configurationmessages, for inter-node forwarding of traffic, and/or for communicatingconfiguration and control traffic from an administrator or user tocluster 400. In some embodiments, back plane 406 may be a physicalnetwork, a VPN or tunnel, or a combination thereof.

Additional details of cluster 400 may be as described in U.S. Pat. No.9,538,345, issued Jan. 3, 2017 to Citrix Systems, Inc. of FortLauderdale, Fla., the teachings of which are hereby incorporated hereinby reference.

E. Systems and Methods for Managing Releases of Global Services in aControlled Manner

The embodiments described herein are directed to systems and methods formanaging releases of global services in a controlled manner. A computingenvironment (such as the Citrix Cloud computing environment) may includea first release of a global service and a second release of a globalservice. The first release and second release may be configured to beenabled and disabled. At the outset, the first release of the globalservice may be enabled and the second release of the global service maybe disabled. The second release of the global service may be configuredto be ready for use in the computing environment following the secondrelease passing one or more checks. A manager service executable in thecomputing environment may be configured to enable use of the secondrelease of the global service in the computing environment. The managerservice may further be configured to disable use of the first release ofthe global service in the computing environment. Execution of the firstrelease of the global service may be maintained in the computingenvironment. The second release of the global service may be determinedto have one or more issues. Responsive to determining that the secondrelease of the global service has one or more issues, the managerservice may be configured to disable use of the second release of theglobal service and re-enable use of the first release of the globalservice.

Global services in a cloud-based computing environment (such as theCitrix Cloud) currently replace existing code executing in thecloud-based environment with new code for execution. According to theembodiments described herein, two releases of code may be maintained inthe computing environment at the same time—one release executing in arunning state, and another release executing in a dormant state. Currentsolutions do not provide for rollback to previous versions of code ininstances of coding issues. Since the existing solutions run only onerelease of code at a time, where issues with the code occur (such asstartup failures, deployment failures, or anything that forces theglobal services to go in a bad state), rollout of repairs may causedowntime. The systems and methods presented herein allow for rollback toprevious versions in instances of coding issues. The new service isstarted in a dormant state, and does not affect the running of theexisting service.

Alpha/Beta (A/B) testing is a tool which allows for rollout of new codein a controlled and reliable manner. Customers are gradually exposed tonew code, and can be moved back to old code in instances of errors orcode failures. This type of controlled rollout provides for two separatepieces of code executing at the same time and actively servicingcustomers at the same time.

In some instances, a service should exist globally as consumers are notdirectly exposed to that code. An example of such services would beworker services that run in the background. The services cannot berolled out in a controlled way since they are not exposed to consumersdirectly. In such cases, in a cloud-based computing environment, codefor the existing service is replaced with new code, which ideallyproperly executes in the first instance. However, in instances ofdeployment failures, such deployment failures may result in downtime. Inmost instances, rollback to the older version of code is performed byredeploying the code for the existing services to replace the new code,which may cause downtime and/or running erroneous code for an extendedduration.

The embodiments described herein may improve the reliability ofreleasing global services (including global workers) by enabling A/Btype release cycles. The embodiments described herein enable a dynamicswitch between a new release of code and provide for fallback to aprevious release of code. According to the embodiments described herein,global services are services that do not have any ApplicationProgramming Interface (API) or external Domain Name System (DNS).Rather, global services are designed or configured to do timed work. Forexample, global services may generate reports every hour, may read aqueue and perform a task based on the item in the queue, etc.

The disclosed systems and methods provide for A/B type release cyclesfor global services. New global services are deployed side-by-side withthe old instance of the service. Following release and publication ofthe new global services, the new global services are idle and thus donot serve any requests or perform any tasks. The old instance of theglobal service continues to function independently (e.g., the oldinstance of the global service serves the requests and performscorresponding tasks). Following various testing and checks on the newglobal services, the new global services may be enabled.

The global services may be controlled by an API service (referred toherein as manager service). The manager service may provide commands toenable or disable various global services within the cloud computingenvironment (such as the Citrix Cloud). The global services may poll themanager service for commands to enable or disable. Such embodiments mayprovide for dynamic switching between an enabled state and disabledstate. For instance, a first and second release for various globalservices may be provided in the cloud computing environment. The firstrelease may be “old” code (e.g., a first version), and the secondrelease may be “new” code (e.g., a second version). The second releasemay be maintained in a dormant state, while the first release may be inan active, running state. In some embodiments, some customers may beserviced by non-global services, which may be provided in both the firstand second release. Following deployment of the new code (e.g., in thesecond release), the manager service may be called to enable the newcode (e.g., global services in the second release) and disable the oldcode (e.g., global services in the first release). Such a call may beinitiated following various testing of the second release. The order ofenabling and disabling may be modified, changed, adapted, etc. accordingto the nature of the product being deployed. Following all testing, theend result may include all global services in the second release in anenabled state (e.g., where all global services in the second release arein an active, running state), and all the global services in the firstrelease in a disabled state (e.g., where all global services in thefirst release are in a dormant state).

Referring to FIG. 5 , depicted is a block diagram of one embodiment of asystem 500 for managing releases of global services in a controlledmanner. The system 500 can include a global services distribution system502 communicably coupled to a client 504 executing, controlling,operating, or otherwise providing a computing environment 506. Theglobal services distribution system 502 may include a global servicesdistributing agent 508. The global services distributing agent 508 mayprovide, provision, communicate, or otherwise deploy a first release ofa global service 510 a and a second release of the global service 510 bto the client 504. The first and second release of the global service510 a, 510 b may be maintained, provided in, located on, contained in,or otherwise deployed in the computing environment 506. In someembodiments, the global services distribution system 502 may include amanager control agent 512. The manager control agent 512 may beconfigured to control a manager service 514 executing in the computingenvironment. The manager service 514 may be designed, configured orimplemented to control a state of the first and second release of theglobal service 510 a, 510 b. The manager control agent 512 maycommunicate signals, instructions, code, etc. to the manager service 514for selectively enabling the first release of the global service 510 aand disabling the second release of the global service 510 b. Themanager control agent 512 may control the manager service 514 tocommunicate commands for disabling the second release of the globalservice 510 b while the second release 510 b is subject to testing andevaluation. The manager control agent 512 may control the manger service514 to communicate commands for enabling the first release of the globalservice 510 a while the second release 510 b is subject to testing andevaluation such that one instance of the global service (510 a in thisexample) is active and running in the computing environment. Followingthe second release 510 b being tested and evaluated, the manager controlagent 512 may control the manager service 514 to communicate an enablecommand to enable the second release 510 b and to communicate an enablecommand to disable the first release 510 a.

Each of the above-mentioned elements or entities is implemented inhardware, or a combination of hardware and software, in one or moreembodiments. Each component of the system 500 may be implemented usinghardware or a combination of hardware or software detailed above inconnection with FIG. 1A-FIG. 1C. For instance, each of these elements orentities can include any application, program, library, script, task,service, process or any type and form of executable instructionsexecuting on hardware of the client device 506 or the global servicesdistribution system 500 for example. The hardware includes circuitrysuch as one or more processors in one or more embodiments.

The global services distribution system 502 may be a server, computer,computing system, etc. configured to distribute, disburse, provide, orotherwise load software to various computing environment. The globalservices distribution system 502 may include one or more of thecomputing components described above with reference to FIG. 1A-FIG. 1C(e.g., one or more processor(s) 103, volatile or non-volatile memory122, 128, communications interface(s) 118). Hence, the global servicesdistribution system 502 may include aspects similar to the computer 101described above.

The global services distribution system 502 may be designed, configuredor implemented to store, retain, or otherwise include software. Suchsoftware may be provided to the global services distribution system 502by developers using, for instance, communications bus 150 (of FIG. 1C).Software developers may code, compile, and release the software to theglobal services distribution system 502. The global servicesdistribution system 502 may receive the code from the softwaredevelopers. The global services distribution system 502 may beconfigured to distribute the software to one or more clients 504, asdiscussed in greater detail below.

In some embodiments, the software included in the global servicesdistribution system 502 may include one or more global service(s).Global services may be or include background services executing in acomputing environment which is universal to all clients executing thecomputing environment. In some embodiments, global services may bedesigned or configured to do timed work. For instance, global servicesmay generate reports every hour, may read a queue and perform a taskbased on the item in the queue, etc. Global services may execute in thebackground. Hence, global services may have limited to no customerinteraction. In some embodiments, global services may not interface withany other external services. Hence, global services may not include any(or are independent of any) application programming interface (API) orexternal Domain Name System (DNS).

The global services distribution system 502 may include a globalservices distributing agent 508. The global services distributing agent508 may be designed, configured or implemented to install, provide,communicate, deliver, or otherwise deploy one or more global services toclients 506. The global services distributing agent 508 may deliver theglobal service(s) to clients 506 when, for instance, the globalservice(s) are provided to the global services distribution system 502(e.g., by the software developers), at a scheduled time, etc.

The global services distribution system 502 may establish a connectionwith the client(s) 506 for delivering the global service(s) to theclient(s) 506. In some embodiments, the global services distributionsystem 502 (or client 506) may include a networking agent. Thenetworking agent may establish, create, generate, or otherwise form oneor more connections between the global services distribution system 502and the client 506.

The networking agent is sometimes referred to as an SD-WAN agent, mVPNagent, or microVPN agent. The networking agent can establish orfacilitate establishment of a network connection between the client 506and the global services distribution system 502 (which hosts, includes,stores, etc. the global services to be delivered to the client 506). Thenetworking agent can perform handshaking for a requested connection fromthe client 506, and can establish the requested connection. In someembodiments, the networking agent may establish a secure or encryptedconnection. For instance, the networking agent may connect to enterpriseresources (including services and network applications) for instance viaa virtual private network (VPN). For example, the networking agent canestablish a secure socket layer (SSL) VPN between the client 506 andglobal services distribution system, which can support remote deliveryor provisioning of one or more global service(s). The VPN connections,sometimes referred to as microVPN or application-specific VPN, may bespecific to particular computing environments, particular clients, etc.Such VPN connections can carry Microsoft Exchange traffic, MicrosoftActive Directory traffic, HyperText Transfer Protocol (HTTP) traffic,HyperText Transfer Protocol Secure (HTTPS) traffic, as some examples.

In some embodiments, the networking agent may be designed, configured orimplemented to form an HTTP or web-based session with the globalservices distribution system 502. The networking agent may establish atransmission control protocol (TCP) connection to, for instance, aserver of the global services distribution system 502 (e.g., a port ofthe server). The networking agent can exchange various commands with theserver within the HTTP session in accordance with TCP. In someembodiments, the networking agent may establish a secure HTTP (e.g.,HTTPS) session in a manner similar to the secure connections describedabove.

In these embodiments, the networking agent can form or establish thenetwork connection between the global services distribution system 502and the client(s) 504. In some embodiments, the networking agent mayform or establish a secure connection (e.g., SSL VPN connection) betweenthe global services distribution system 502 and the client(s) 504.

The global services distribution system 502 may be designed, configuredor implemented to initiate a provisioning session to deliver thesoftware to the client(s) 504 (e.g., including the global services). Theglobal services distribution system 502 may initiate the provisioningsession within or across the network connection established by thenetworking agent. In some embodiments, a remote session agent mayinitiate the provisioning session (e.g., which may be established usingCitrix high definition user experience (HDX) or independent computingarchitecture (ICA) protocol, or remote desktop protocol (RDP)). Theremote session agent may initiate the provisioning session in accordancewith any type or form of protocols, such as RDP, Appliance Link Protocol(ALP), Remote Frame Buffer (RFB) Protocol, and ICA Protocol. Suchprotocols can allow delivery of software that is natively hosted at theglobal services distribution system 502 to be communicated to the client504.

The global services distributing agent 508 may communicate, deliver,distribute, provide, or otherwise deploy the global services across thenetwork connection established by the global services distributionsystem (e.g., the networking agent). In some embodiments, the globalservices distributing agent 508 may deploy a first release of a globalservice 510 a and a second release of the global service 510 b.“Release,” as used herein, refers to an iteration, instance, version,etc. of a global service. In some embodiments, the first release 510 amay be released (or deployed to the client 504) prior to the secondrelease 510 b. Hence, the first release 510 a may be the first instanceor iteration of the global service, and the second release 510 b may bethe second instance or iteration of the same global service. In someembodiments, the first release 510 a and second release 510 b may bedeployed side-by-side (e.g., the first and second releases 510 a, 510 bmay be deployed at the same time). In both embodiments, the firstrelease 510 a and second release 510 b may both be implemented in,located, contained, or otherwise deployed and configured to executewithin the computing environment 506 (e.g., of the client 504). Thesecond release 510 b may be or include one or more enhancements,improvements, and/or bug fixes with respect to the first release 510 a.Various software developers may modify one or more aspects of the firstrelease 510 a to form the second release 510 b. The software developersmay modify the first release 510 a in response to user feedback, crashor force close reports, error reports, latency issues, etc. The secondrelease 510 b may address the one or more aspects or issues identifiedwithin the first release 510 a. In some embodiments, the second release510 b may provide for improved functionality which was previouslyunavailable in the first release 510 a.

In some embodiments, the second release 510 b may be subject toAlpha/Beta (AB) testing. The A-testing may occur in-house (e.g., by thesoftware developers). The B-testing may occur by, for instance, a subsetof clients 504. The first release and the second release 510 a, 510 bmay both be maintained within the computing environment 506. In someembodiments, the second release 510 b may be selectively enabled on thesubset of clients 504 for testing. When enabled, the second release 510b may be in an active, running state such the second release of theglobal service 510 b may service requests for a client 504, performvarious functions, or otherwise act independently of the disabled globalservice 510. The first release 510 a may be disabled for the subset ofclients 504 such that one release (e.g., the second release 510 b) isexecuting in the computing environment 506 for the subset of clients504. When disabled, the first release 510 a may be in an idle, dormantstate such that the first release of the global service 510 a mayexecute within the computing environment 506, but otherwise not serviceany requests or perform any functions for the client 504. The computingenvironment 506 for the remaining clients 504 in the network may executethe first release 510 a (hence, the first release 510 a may be enabledfor the remaining clients 504). Following testing and other checks ofthe second release 510 b, the second release 510 b may be enabled forall clients 504, and the first release 510 a may be disabled for allclients 504.

The system 500 may include one or more client(s) 504. In someembodiments, the client(s) 504 may include aspects similar to clients102 described above with reference to FIGS. 1A-1B. For instance,client(s) 504 may be or include one or more devices used by a user forconnecting to one or more network resources. In some embodiments, theclient(s) 504 may execute a computing environment 506. The computingenvironment 506 may be similar in some aspects to computing environment15 described above in at least FIG. 1B. The computing environment 506may execute or operate various applications which may access, process,or otherwise use various data files. In some embodiments, the computingenvironment 506 may be delivered to the client 504 across the networkconnection established by the global services distribution system 502(or similar network connection and provisioning session). Hence, in someembodiments, the computing environment 506 may be a cloud-basedcomputing environment. In some embodiments, the computing environment506 may execute wholly on or within the client 504 (e.g., the computingenvironment 506 may be a local computing environment).

The client(s) 504 may receive the global service(s) from the globalservices distribution system 502. In some embodiments, the client(s) 504may receive the global service(s) when the computing environment isdelivered to the client 504. For instance, the client(s) 504 may receivethe global service(s) across the same channel of the remote deliverysession as the channel in which the cloud-based computing environment isdelivered. In still some embodiments, the client(s) 504 may receive theglobal services separate from the computing environment 506. Theclient(s) 504 may receive the global service(s) across a differentchannel of the remote delivery session (or across a different remotedelivery session) with respect to the channel in which the cloud-basedcomputing environment is delivered. The client(s) 504 may receive theglobal service(s) as a packet, which may be a downloadable update. Ineach of these embodiments, the global service(s) may be executed withinthe computing environment 506, which may be a cloud-based computingenvironment 506 or a local computing environment 506.

In some embodiments, the client(s) 504 may receive global and non-globalservices. Non-global services may be or include services executing in acomputing environment which may be specific to a particular client orsubset of clients. In some embodiments, non-global services may executein the background (e.g., similar to global services). In someembodiments, non-global services may execute in the foreground (e.g.,some non-global service(s) may include various user interface aspectsand designed to interact with a user). Non-global service(s) may bedesigned, configured or implemented to execute and process user requestswithout regard to the status of global service(s). Hence, non-globalservice(s) may operate or are configured to operate independently ofglobal services. In some embodiments, non-global service(s) may be orinclude local services (e.g., services which may execute locally outsideof the computing environment, or services which may execute within thecomputing environment but specific to particular clients or clientrequirements within a given client network).

As described above, the global services received by the client 504 mayexecute, be downloaded/installed, or otherwise be included in ordeployed within the computing environment 506. In some embodiments, thecomputing environment 506 may include a first release of a globalservice 510 a and a second release of a global service 510 b.

In some embodiments, the computing environment 506 may switch betweenexecuting the first release of a global service 510 a and executing thesecond release of the global service 510 b. The computing environment506 may include a manager service 514. The manager service 514 may beconfigured to selectively enable the first release 510 a and secondrelease 510 b. The manager service 514 may enable the second release 510b and, in response to enabling the second release 510 b, disable thefirst release. Hence, the manager service 514 may maintain one of thereleases of the global services 510 a, 510 b in an enabled state. In theenabled state, the global services 510 may service requests for a client504, perform various functions, or otherwise act independently of thedisabled global service 510. In the disabled state, the globalservice(s) 510 may execute within the computing environment 506, butotherwise not service any requests or perform any functions. Hence, inthe disabled state, the global service 510 may be dormant (or inactive),whereas, in the enabled state, the global service 510 may be in anactive (e.g., running) state. Both releases 510 a, 510 b may be switchedbetween enabled and disabled state according to various inputs and/ordetected conditions.

In some embodiments, the first and/or second release 510 a, 510 b mayregister with the manager service 514. For instance, the first and/orsecond release 510 a, 510 b may register with the manager service 514when the first and/or second release 510 a, 510 b are downloaded,installed, provided to, execute within, or otherwise loaded into thecomputing environment 506. The first and/or second release 510 a, 510 bmay register with the manager service 514 by providing the managerservice 514 with a software number, version number, or other identifierassociated with the respective release 510 a, 510 b. The manager service514 may register the first and/or second release 510 a, 510 b based onthe software number, version number, etc. In some embodiments, when anew version (e.g., the second release 510 b) is registered, the managerservice 514 may automatically enable the second release 510 b (anddisable the first release 510 a). In some embodiments, when the firstand/or second release 510 a, 510 b register with the manager service514, the first and/or second release 510 a, 510 b may provide anindication (which may be hard-coded into the first/second release 510 a,510 b, provided with the first/second release 510 a, 510 b when loadedinto the computing environment 506, etc.) to the manager service 514which indicates a time when the second release 510 b is to be enabled orotherwise rolled out to the corresponding client 504.

The manager service 514 may be configured to include, store, orotherwise maintain a state of each release of a global service 510 a,510 b. For instance, the manager service 514 may maintain data foridentifying each release (e.g., software number, version number, etc.)and an enabled/disabled state corresponding to each release. The managerservice 514 may maintain the state of each release of a global service510 a, 510 b (e.g., in table form) in local memory at the client 504,for instance.

In some embodiments, each global service 510 a, 510 b may be designed,configured or implemented to loop poll the manager service 514. Eachglobal service 510 may poll the manager service 514 to determine theirrespective current state. Each global service 510 may poll the managerservice 514 at various intervals (e.g., at a predetermined time in aday, a predetermined number of times a day, an hour, a week, etc.). Themanager service 514 may communicate a command corresponding to therequesting global service 510 upon receiving the poll from the globalservice 510. The poll may include identification informationcorresponding to the global service 510 (e.g., software number, versionnumber, etc.). The manager service 514 may access the state associatedwith the global service 510 by cross-referencing the identificationinformation from the poll with the data maintained by the managerservice 514 for identifying particular release. The manager service 514may identify the state corresponding to the global service 510requesting the state. The manager service 514 may provide a command(e.g., enable/disable command) to the global service 510 correspondingto the identified state for the global service 510.

In some embodiments, the manager service 514 may provide an initialstate to each global service 510 (e.g., initially enabled, initiallydisabled). The manager service 514 may provide the initial state whensuch global service 510 is loaded into the computing environment 506.The manager service 514 may then provide updated states (e.g., byproviding corresponding enable/disable commands) to specific globalservices 510 when changes to the state are identified, determined, made,or otherwise occur, as described below.

In some embodiments, the global services 510 may not receive any APIcalls (or other calls, requests, etc.) other than from the managerservice 514. Rather, the global services may act independently from anyother calls (except for manager service 514 calls). In some embodiments,the manager service 514 may route various requests and data to variousenabled global services 510. Hence, the global services 510 may onlyinterface with manager service 514.

The manager service 514 may modify the state of the global services 510according to various detected conditions/inputs. In some embodiments,the global services 510 may poll the manager service 514 to determinewhether their corresponding state has changed. The manager service 514may provide a command to the global services 510 corresponding to theirrespective status (e.g., enable command or disable command). In someembodiments, the manager service 514 may provide the state to the globalservice 510 (e.g., by providing the corresponding enable/disable commandwithout the global services 510 polling the manager service 514)responsive to the state for the global service 510 changing.

The manager service 514 may identify a switch between the first release510 a being enabled and the second release 510 b being enabled in anumber of ways, several of which will be discussed in greater detailbelow. However, the present disclosure is not limited to a particulararrangement. Rather, the following examples are provided for purposes ofillustration.

In some embodiments, the manager service 514 may be configured toidentify when a second release of a global service 510 b is loaded intothe computing environment 506. The manager service 514 may identify whenthe second release of the global service 510 b is loaded into thecomputing environment 506 when the second release 510 b registers withthe manager service 514, for instance. When the manager service 514identifies the second release of the global service 510 b is loaded intothe computing environment 506, the manager service 514 may automaticallyset the status of the second release 510 b to “enabled.” The managerservice 514 may correspondingly set the status of the first release 510a to “disabled” such that one instance of the global service 510 (e.g.,510 b) is enabled within the computing environment 506. In embodimentswhere the global services 510 loop poll the manager service 514, theglobal services 510 may be enabled/disabled following the subsequentpoll following the status change for the first release and secondrelease 510 a, 510 b (e.g., by providing the corresponding command). Insome embodiments, the manager service 514 may communicate a commandinstructing the first release and/or second release 510 a, 510 b toenable/disable when the status changes (thus bypassing the loop pollingby the first/second release 510 a, 510 b).

In some embodiments, when the second release of a global service 510 bis loaded into the computing environment 506, the second release 510 bmay include some indication of a time in which the second release 510 bis to be enabled. In some instances, the scheduled enable time may behard-coded into the second release 510 b. In some instances, thescheduled enable time may be included with the packet delivering thesecond release 510 b. The manager service 514 may automatically updatethe status of the second release 510 b to “enabled” at the scheduledtime corresponding to the indication. The manager service 514 maycorrespondingly set the status of the first release 510 a to “disabled”such that one instance of the global service 510 (e.g., 510 b) isenabled within the computing environment 506. In embodiments where theglobal services 510 loop poll the manager service 514, the globalservices 510 may be enabled/disabled following the subsequent pollfollowing the status change for the first release and second release 510a, 510 b (e.g., by providing the corresponding command). In someembodiments, the manager service 514 may communicate a commandinstructing the first release and/or second release 510 a, 510 b toenable/disable when the status changes (thus bypassing the loop pollingby the first/second release 510 a, 510 b).

Such embodiments may be a rollout of new software (e.g., associated withthe global service(s) 510), patches or bug fixes, improvements, etc. toold software (e.g., prior releases of global services), etc. Hence, thesecond release 510 b may be an otherwise improved version of the firstrelease 510 a of the same global service. In some embodiments, a newrelease (e.g., the second release 510 b) may itself include variousbugs. For instance, where a new release is being beta-tested, the newrelease may require various refinements prior to a full public rollout.It may therefore be desirable to rollback from a new release to an oldrelease. Therefore, at least two releases of a global service (e.g.,first and second release 510 a, 510 b) are maintained in (thus executingwithin) the computing environment 506. The manager service 514 mayrollback the global service 510 enabled in the computing environment 506from the second release 510 b to the first release 510 a. The managerservice 514 may revise the status for each of the first release 510 aand second release 510 b. The manager service may revise the status forthe first release 510 a to “enabled” and correspondingly revise thesecond release 510 b to “disabled.” The manager service 514 may beconfigured to detect instances where it is desirable to rollback to theold release in response to a number of conditions.

In some embodiments, the manager service 514 may be designed, configuredor implemented to detect one or more issues with the enabled globalservice 510. For instance, the manager service 514 may be configured todetect, register, or otherwise identify when the global service 510 doesnot execute a requested action. The global service 510 may produce anerror report, which may be received by the manager service 514. Theerror report may indicate that the global service 510 crashed whileexecuting the requested action, was performing slowly or inefficientlywhile executing the requested action, etc. In some instances, themanager service 514 may poll the global service 510 to determine whetherthe global service 510 has completed a requested action. Where theglobal service 510 responds in the positive, the manager service 514 mayidentify no present issues with the global service 510. Where the globalservice 510 responds in the negative, the manager service 514 mayidentify a present issue with the global service 510. In still someinstances, actions may be routed through the manager service 514, whichmay then determine when such actions are successfully completed (e.g.,by the global service 510). When an action is not successfullycompleted, the manger service 514 may identify an issue with the globalservice 510. When the manager service identifies an issue with theglobal service 510, the manager service 514 may update the status of theenabled global service (e.g., global service 510 b) to “disabled.” Themanager service 514 may correspondingly update the status of thedisabled global service (e.g., the first global service 510 a) to“enabled.”

In some embodiments, the manager service 514 may receive a request froman administrator (e.g., a system administrator, a software developer,etc.) to rollback from the second release of the global service 510 b tothe first release of the global service 510 a. In some embodiments, theglobal services 510 may report issues, error reports, etc. to theadministrator (e.g., through an associated database or other manner inwhich such reports may be communicated to and accessed by theadministrator). The administrator may identify one or more issues in thesecond release of the global service 510 b based on various reports fromthe second release 510 b. When the administrator identifies issues inthe second release 510 b, the user may communicate a signal (e.g., viavarious communications channels such as, for instance, the remotedelivery session) to the manager service 514 to disable the secondrelease 510 b and enable the first release 510 a. The manager service514 may update the status of the enabled global service (e.g., globalservice 510 b) to “disabled.” The manager service 514 maycorrespondingly update the status of the disabled global service (e.g.,the first global service 510 a) to “enabled.”

In some embodiments, the manager service 514 may receive a request formodifying the status of the global service(s) from one or more devicesor components within the global services distribution system 502. Theglobal services distribution system 502 may include a manager controlagent 512. The manager control agent 512 may be or include any device orcomponent designed, configured or implemented to control managerservice(s) 514 across various client(s) 504. For instance, the managercontrol agent 512 may communicate with the manager service 514 acrossthe remote delivery session for delivering the global services 510, orsimilar network connection and provisioning session. The manager controlagent 512 may act as a master, and the manager service 514 may act as aslave. Hence, the manager control agent 512 may control the managerservice 514 to execute the functions described above (e.g., the managercontrol agent 512 may control the manager service 514 to switch theglobal services 510 between enabled and disabled states, the managercontrol agent 512 may route requests from an administrator to the globalservices 510 for switching states, the manager control agent 512 maymaintain the status of all global services 510, etc.).

In each embodiment, the manager service 514 may generally be designed,configured or implemented to control the state of global services 510.The manager service 514 may control the state of a global service 510 toenable the global service 510 and correspondingly disable a previousrelease of the global service 510. The manager service 514 maysubsequently disable the enabled global service 510 and re-enable thedisabled previous release of the global service 510. Such embodimentsmay provide for addressing and fixing various bugs, improvements, etc.to generally beta-test new releases of global services 510.

Referring now to FIG. 6 , depicted is a block diagram of one example ofa computing environment having releases of global services switchingbetween enabled to disabled. Two instances of a computing environment506 are shown—a first instance shown at the top of FIG. 6 and a secondinstance shown at the bottom of FIG. 6 . The first instance may betemporally prior to the second instance.

The global services distributing agent 508 may distribute a firstrelease and second release 510 a, 510 b (referred to in FIG. 6 asRelease A and Release B) of global services. As shown in the example ofFIG. 6 , each release may further include non-global services 600. Thenon-global service(s) may execute independently of the manager service514. The manager service 514 may be configured to control the state ofthe global services 510(1)-510(8). In some embodiments, global services510(1)-510(4) may directly correlate to global service(s) 501(5)-510(8)(e.g., global service 510(5) may be a new version of global service510(1), global service 510(6) may be a new version of global service510(2), etc.). Global services 510(1)-510(8) may be communicably coupledto the manager service 514. The manager service 514 may be configured toenable and disable each of the global services 510. The manager service514 may enable the new cold (e.g., the global services 510(1)-510(4) inRelease A) when the new code is downloaded, loaded, provided to, etc.the computing environment 506, at a scheduled time provided by therespective global service 510, in response to an administrator request,in response to a request from a component within the global servicesdistribution system 502, etc. Additionally, the manager service 514 maycorrespondingly disable the old code (e.g., the global services510(5)-510(8) in Release B). The manager service 514 may enable theglobal services 510(1)-510(4) and correspondingly disable globalservices 510(5)-510(8), as shown in the example computing environment506 at the top of FIG. 6 .

The manager service 514 may change, modify, reconfigure, adjust, etc.the state of the global services 510(1)-510(8) responsive to variousdetected conditions, inputs, etc. For instance, the manager service 514may identify, detect, etc. one of the global services 510(1)-510(8)crashing, malfunctioning, performing slowly, or one or more other issueswith the global services 510(1)-510(8). The manager service 514 mayidentify such issues based on error reports from the global services510(1)-510(8), instructions or commands from an administrator, such as anetwork administrator or software developer, instructions from a deviceor component at the global services distribution system 502, etc. Themanager service 514 may modify the state of the global services510(1)-510(4) in the second release (e.g., release A) to “disabled” andthe manager service 514 may modify the state of the global service510(5)-510(8) in the first release (e.g., release B) to “enabled,” asshown in the bottom of FIG. 6 . Hence, the manager service 514 mayadaptively modify the status of the global service(s) 510 to accommodatefor rollback, rollout, etc. of various global service(s) 510 and toprovide for AB testing of new global service(s) 510 software withlimited lag-time in the event of rollback.

Referring to FIG. 7 , depicted a flow diagram of one example embodimentof a method 700 for managing releases of global services in a controlledmanner. The functionalities of the method may be implemented using, orperformed by, the components detailed herein in connection with FIGS.1-6 . In brief overview, a global services distribution agent may deploya second release of a global service (705). A manager service mayidentify the second release is ready for use (710). The manager servicemay enable the second release (715). The manager may disable the firstrelease (720). The manager service may determine the second release isto be disabled (725). The manager service may disable the second releaseand re-enable the first release (730).

At operation (705), a global services distribution agent may deploy asecond release of a global service. In some embodiments, the globalservices distributing agent may deploy the second release of the globalservice in a computing environment for a client. The global servicesdistributing agent may deploy the second release of the global servicein a disabled state. In the disabled state, the second release may be inan idle, dormant state such that the second release of the globalservice may execute within the computing environment, but otherwise notservice any requests or perform any functions for the client. Thecomputing environment may include a first release of the global servicewhich is enabled and in use. When enabled, the first release may be inan active, running state such the first release of the global servicemay service requests for the client, perform various functions, orotherwise act independently of the disabled global service (e.g., thesecond release). In some embodiments, each of the first release of theglobal service and the second release of the global service may beconfigured to be enabled and disabled.

The global services distribution agent may deploy the second release ofa global service across a remote delivery session between a globalservices distribution system and a client. The global servicesdistribution system may include a networking agent which establishes,creates, generates, or otherwise forms a connection between the globalservices distribution system and the client. The networking agent, whichis sometimes referred to as an SD-WAN agent, mVPN agent, or microVPNagent, can establish or facilitate establishment of a network connectionbetween the client and the global services distribution system (whichhosts, includes, stores, etc. the global services to be delivered to theclient). The networking agent can perform handshaking for a requestedconnection from the client, and can establish the requested connection.In some embodiments, the networking agent may establish a secure orencrypted connection. For instance, the networking agent may connect toenterprise resources (including services and network applications) forinstance via a virtual private network (VPN). For example, thenetworking agent can establish a secure socket layer (SSL) VPN betweenthe client and global services distribution system, which can supportremote delivery or provisioning of one or more global service(s). TheVPN connections, sometimes referred to as microVPN orapplication-specific VPN, may be specific to particular computingenvironments, particular clients, etc. Such VPN connections can carryMicrosoft Exchange traffic, Microsoft Active Directory traffic,HyperText Transfer Protocol (HTTP) traffic, HyperText Transfer ProtocolSecure (HTTPS) traffic, as some examples.

In some embodiments, the networking agent may be designed, configured orimplemented to form an HTTP or web-based session with the globalservices distribution system. The networking agent may establish atransmission control protocol (TCP) connection to, for instance, aserver of the global services distribution system (e.g., a port of theserver). The networking agent can exchange various commands with theserver within the HTTP session in accordance with TCP. In someembodiments, the networking agent may establish a secure HTTP (e.g.,HTTPS) session in a manner similar to the secure connections describedabove.

In these embodiments, the networking agent can form or establish thenetwork connection between the global services distribution system andthe client(s). In some embodiments, the networking agent may form orestablish a secure connection (e.g., SSL VPN connection) between theglobal services distribution system and the client(s).

The global services distribution system may be designed, configured orimplemented to initiate a provisioning session to deliver the softwareto the client(s) (e.g., including the global services). The globalservices distribution system may initiate the provisioning sessionwithin or across the network connection established by the networkingagent. In some embodiments, a remote session agent may initiate theprovisioning session (e.g., which may be established using Citrix highdefinition user experience (HDX) or independent computing architecture(ICA) protocols, or the remote desktop protocol (RDP)). The remotesession agent may initiate the provisioning session in accordance withany type or form of protocols, such as RDP, Appliance Link Protocol(ALP), Remote Frame Buffer (RFB) Protocol, and ICA Protocol. Suchprotocols can allow delivery of software that is natively hosted at theglobal services distribution system to be communicated to the client.

The global services distributing agent may communicate, deliver,distribute, or otherwise provide the global services across the networkconnection established by the global services distribution system (e.g.,the networking agent). In some embodiments, the computing environmentmay be delivered to the client across the same (or similar) networkconnection. In such embodiments, the computing environment may be acloud based computing environment (e.g., where computing is performedremotely from the client and content is delivered to the client).

In some embodiments, the global services distributing agent may providea first release of a global service and a second release of the globalservice. “Release,” as used herein, refers to an iteration, instance,version, etc. of a global service. In some embodiments, the firstrelease may be released (or provided to the client) prior to the secondrelease. Hence, the first release may be the first instance or iterationof the global service, and the second release may be the second instanceor iteration of the same global service. In some embodiments, the firstrelease and second release may be released side-by-side (e.g., the firstand second releases may be provisioned to the client at the same time).In both embodiments, the first release and second release may both beimplemented in, located within, or contained within and configured toexecute within the computing environment (e.g., of the client).

The second release may be or include one or more enhancements,improvements, and/or bug fixes with respect to the first release.Various software developers may modify one or more aspects of the firstrelease to form the second release. The software developers may modifythe first release in response to user feedback, crash or force closereports, error reports, latency issues, etc. The second release mayaddress the one or more aspects identified within the first release. Insome embodiments, the second release may provide for improvedfunctionality which was previously unavailable in the first release.

In some embodiments, at least one of the first release and secondrelease of the global service may not be configured to receive anyapplication programming interface (API) calls other than from themanager service. In some embodiments, the global services may notreceive any API calls (or other calls, requests, etc.) other than frommanager service. Rather, the global services may act independently fromany other calls (except for manager service calls). In some embodiments,the manager service may route various requests and data to variousenabled global services. Hence, the global services may only interfacewith manager service.

In some embodiments, the first release and/or second release of theglobal service may register with the manager service. In For instance,the first and/or second release may register with the manager servicewhen the first and/or second release are downloaded, installed, providedto, execute within, or otherwise loaded into the computing environment.The first and/or second release may register with the manager service byproviding the manager service with a software number, version number, orother identifier associated with the respective release. The managerservice may register the first and/or second release based on thesoftware number, version number, etc.

At operation (710), a manager service may identify the second release isready for use. In some embodiments, the manager service may identifythat the second release of the global service has passed one or morechecks and is ready to be enabled for use in the computing environment.In some embodiments, the manager service may receive one or morecommands or instructions indicating the second release has passed one ormore checks and is ready to be enabled for use. For instance, themanager service may receive the one or more commands or instructionsfrom an administrator, such as a network administrator, a softwaredeveloper, etc. The administrator may perform the one or more checks onthe second release. In other instances, the manager service may receivethe one or more commands or instructions from another device orcomponent in the global services distribution system, such as a managercontrol agent. The manager control agent may provide an indication whichindicates the second release has passed the one or more checks. Themanager control agent may receive such an indication from theadministrator following the administrator testing, checking, orotherwise verifying/validating the second release. The second releasemay pass the one or more checks corresponding to an alpha-testing.Hence, the manager service may identify that the second release of theglobal service has passed alpha-testing and is ready to be enabled foruse in the computing environment (e.g., beta-testing).

In embodiments where one of the first release of the global service orsecond release of the global service registers with the manager service,the first and/or second release may poll the manager service for one ofan enable or disable command. Each global service may poll the managerservice to determine their respective current state. Each global servicemay poll the manager service at various intervals (e.g., at apredetermined time in a day, a predetermined number of times a day, anhour, a week, etc.). The manager service may communicate a commandcorresponding to the requesting global service upon receiving the pollfrom the global service. The poll may include identification informationcorresponding to the global service (e.g., software number, versionnumber, etc.). The manager service may access the state associated withthe global service by cross-referencing the identification informationfrom the poll with the data maintained by the manager service foridentifying particular release. The manager service may identify thestate corresponding to the global service requesting the state. Themanager service may provide a command (e.g., enable/disable) to theglobal service corresponding to the identified state for the globalservice.

At operation (715), the manager service may enable the second release.In some embodiments, the manager service may enable use of the secondrelease of the global service in the computing environment. The managerservice may communicate a command to enable the second releaseresponsive to identifying the state of the second release is “enabled”(e.g., in response to the second release polling the manager service orin response to the state changing). The manager service may communicatethe command to the second release, which may cause the second command tobe enabled. In an enabled state, the second release may service requestsand perform functions/actions within the computing environment. Thesecond release may be enabled from a disabled state where the secondrelease ignores, disregards, or otherwise does not perform or executeany actions within the computing environment. The second release may bein the disabled state until the second release receives the command fromthe manager service.

At operation (720), the manager service may disable the first release.In some embodiments, the manager service may disable use of the firstglobal service in the computing environment while maintaining executionof the first release of the global service in the computing environment.Hence, the first release may be disabled, but still be maintained within(and therefore executing within) the computing environment. The managerservice may communicate a command to disable the first releaseresponsive to identifying the state of the first release is “disabled”(e.g., in response to the first release polling the manager service orin response to the state changing). The manager service may communicatethe command to the first release, which may cause the first command tobe disabled. The first release may be disabled such that the firstrelease ignores, disregards, or otherwise does not perform or executeany actions within the computing environment. The first release maystill be maintained within the computing environment and, therefore,execute within the computing environment. The first release, however,may not execute any functions or perform any actions (other than, forinstance, loop polling the manager service for an enable command).

In some embodiments, the manager service may disable the first releaseof the global service responsive to enabling the second release of theglobal service. Hence, the manager service may perform operation (715)and (720) simultaneously or sequentially. In these embodiments, themanager service may maintain one instance (or release) of the globalservice enabled and executing within the computing environment (e.g.,either the first release or second release of the global service).

At operation (725), the manager service may determine the second releaseis to be disabled. In some embodiments, the manager service maydetermine that the second release of the global service has one or moreissues and is to be disabled. The manager service may determine that thesecond release of the global service has one or more issues in a numberof ways. In some instances, the manager service may detect, register, orotherwise identify when the second release of the global service doesnot execute a requested action. The second release of the global servicemay produce an error report, which may be received by the managerservice. The error report may indicate that the second release of theglobal service crashed while executing the requested action, wasperforming slowly or inefficiently while executing the requested action,etc. In some instances, the manager service may poll the second releaseof the global service to determine whether the second release hascompleted a requested action. Where the second release of the globalservice responds in the positive, the manager service may identify nopresent issues with the second release. Where the second release of theglobal service responds in the negative, the manager service mayidentify a present issue with the second release. In still someinstances, actions for the second release of the global service may berouted through the manager service, which may then determine when suchactions are successfully completed (e.g., by the second release of theglobal service). When an action is not successfully completed, themanger service may identify an issue with the second release of theglobal service. In some embodiments, the manager service may determinethat the second release of the global service has one or more issuesbased on data received from another party or component, such as theadministrator or manager control agent described above with respect tooperation (710). The administrator (through the manager control agent ordirectly from the administrator to the manager service) may communicatean indication, instruction, or other identification which indicates thatthe second release of the global service includes the one or moreissues. The administrator may receive error reports from variousclients, perform testing which reveals the one or more issues, receivefeedback from various clients, etc. The administrator may flag suchissues for disabling the second release. The manager service may receivean identification or indication of such issues, and the manager servicemay determine that the second release is to be disabled.

In some embodiments, the manager service may determine (or furtherdetermine) that the global service is to be rolled back to the firstrelease of the global service from the second release of the globalservice. Responsive to determining that the second release of the globalservice has one or more issues and is to be disabled, the managerservice may determine that the global service is to be rolled back. Insuch embodiments, the manager service may maintain one instance (orrelease) of the global service active and executing within the computingenvironment.

At operation (730), the manager service may disable the second releaseand re-enable the first release. In some embodiments, the managerservice may disable use of the second release of the global service inthe computing environment and may re-enable use of the first release ofthe global service. The manager service may disable use of the secondrelease of the global service in a manner similar to the manager servicedisabling use of the first release at operation (720). The managerservice may re-enable use of the first release of the global service ina manner similar to the manager service enabling use of the secondrelease at operation (715). Hence, operation (730) may be similar tooperations (715) and (720).

In some embodiments, the manager service may maintain the disabledsecond release of the global service executing and idle in the computingenvironment. Hence, similar to the first release following operation(720), the second release may be maintained within the computingenvironment (and, therefore, executing within the computingenvironment). The second release of the global service may be maintainedwithin the computing environment such that, should the issue(s) (e.g.,identified at operation (725)) be resolved or be determined to benon-issues, the second release may be re-enabled (and first release becorrespondingly disabled). Such embodiments provide for adaptive, quickswitching between releases of global services. Such embodiments mayeliminate or lessen the likelihood of downtime from pushing new versions(or rollback to an old version) to the client for installing, executing,or otherwise providing or provisioning within the computing environment.Rather, such embodiments maintain at least two releases of globalservices for quickly switching between one and the other.

In some embodiments, one or more non-global services executing in thecomputing environment continue to process user requests received whenthe first release of the global service was enabled. Non-global servicesmay be or include services executing in a computing environment whichmay be specific to a particular client or subset of clients. In someembodiments, non-global services may execute in the background (e.g.,similar to global services). In some embodiments, non-global servicesmay execute in the foreground (e.g., some non-global service(s) mayinclude various user interface aspects and designed to interact with auser). Non-global service(s) may be designed, configured or implementedto execute and process user requests without regard to the status ofglobal service(s). Hence, non-global service(s) may operate or areconfigured to operate independently of global services. In someembodiments, non-global service(s) may be or include local services(e.g., services which may execute locally outside of the computingenvironment, or services which may execute within the computingenvironment but specific to particular clients or client requirementswithin a given client network).

Various elements, which are described herein in the context of one ormore embodiments, may be provided separately or in any suitablesub-combination. For example, the processes described herein may beimplemented in hardware, software, or a combination thereof. Further,the processes described herein are not limited to the specificembodiments described. For example, the processes described herein arenot limited to the specific processing order described herein and,rather, process blocks may be re-ordered, combined, removed, orperformed in parallel or in serial, as necessary, to achieve the resultsset forth herein.

It should be understood that the systems described above may providemultiple ones of any or each of those components and these componentsmay be provided on either a standalone machine or, in some embodiments,on multiple machines in a distributed system. The systems and methodsdescribed above may be implemented as a method, apparatus or article ofmanufacture using programming and/or engineering techniques to producesoftware, firmware, hardware, or any combination thereof. In addition,the systems and methods described above may be provided as one or morecomputer-readable programs embodied on or in one or more articles ofmanufacture. The term “article of manufacture” as used herein isintended to encompass code or logic accessible from and embedded in oneor more computer-readable devices, firmware, programmable logic, memorydevices (e.g., EEPROMs, ROMs, PROMs, RAMs, SRAMs, etc.), hardware (e.g.,integrated circuit chip, Field Programmable Gate Array (FPGA),Application Specific Integrated Circuit (ASIC), etc.), electronicdevices, a computer readable non-volatile storage unit (e.g., CD-ROM,USB Flash memory, hard disk drive, etc.). The article of manufacture maybe accessible from a file server providing access to thecomputer-readable programs via a network transmission line, wirelesstransmission media, signals propagating through space, radio waves,infrared signals, etc. The article of manufacture may be a flash memorycard or a magnetic tape. The article of manufacture includes hardwarelogic as well as software or programmable code embedded in a computerreadable medium that is executed by a processor. In general, thecomputer-readable programs may be implemented in any programminglanguage, such as LISP, PERL, C, C++, C#, PROLOG, or in any byte codelanguage such as JAVA. The software programs may be stored on or in oneor more articles of manufacture as object code.

While various embodiments of the methods and systems have beendescribed, these embodiments are illustrative and in no way limit thescope of the described methods or systems. Those having skill in therelevant art can effect changes to form and details of the describedmethods and systems without departing from the broadest scope of thedescribed methods and systems. Thus, the scope of the methods andsystems described herein should not be limited by any of theillustrative embodiments and should be defined in accordance with theaccompanying claims and their equivalents.

It will be further understood that various changes in the details,materials, and arrangements of the parts that have been described andillustrated herein may be made by those skilled in the art withoutdeparting from the scope of the following claims.

We claim:
 1. A method comprising: maintaining, by one or moreprocessors, a first state of a first release of a service and a secondstate of a second release of the service in a computing environment, thefirst release of the service is executing and enabled for processingrequests from clients and the second release of the service is executingand disabled from processing requests from clients; communicating, bythe one or more processors, a first disable command to the first releaseof the service and a first enable command to the second release of theservice determining, by the one or more processors, that the secondrelease of the service is having one or more issues; updating, by theone or more processor, the first state of the first release of theservice to be enabled and the second state of the second release to bedisabled responsive to identifying that the second release of theservice is having one or more issues, and communicating, by the one ormore processors, a second enable command to the first release of theservice to enable the first release of the service to process clientrequests and a second disable command to the second release of theservice to disable the second release of the service from processingclient requests.
 2. The method of claim 1, wherein each of the firstrelease of the service and the second release of the service areconfigured to receive enable commands from the one or more processorswhile disabled from processing client requests.
 3. The method of claim1, further comprising communicating, by the one or more processors, oneof the first enable command or the first disable command responsive toreceiving a poll from one of the first release of the service or thesecond release of the service.
 4. The method of claim 1, furthercomprising communicating, by the one or more processors, one of thesecond enable command or the second disable command responsive toreceiving a poll from one of the first release of the service or thesecond release of the service.
 5. The method of claim 1, whereinrequests from clients are directed to one of the first release of theservice or the second release of the service that is enabled.
 6. Themethod of claim 1, wherein the first release of the service is executedat a first time instance and one of enabled or disabled at a second timeinstance.
 7. The method of claim 1, wherein the second release of theservice is executed at a first time instance and one of enabled ordisabled at a second time instance.
 8. The method of claim 1, whereinthe second release of the service comprises one of updates to the firstrelease of the service to be tested for issues.
 9. A system comprising:one or more processors, coupled to memory and configured to: maintain afirst state of a first release of a service and a second state of asecond release of the service in a computing environment, the firstrelease of the service is executing and enabled for processing requestsfrom clients and the second release of the service is executing anddisabled from processing requests from clients; communicate a firstdisable command to the first release of the service and a first enablecommand to the second release of the service determine that the secondrelease of the service is having one or more issues; update the firststate of the first release of the service to be enabled and the secondstate of the second release to be disabled responsive to identifyingthat the second release of the service is having one or more issues; andcommunicate a second enable command to the first release of the serviceto enable the first release of the service to process client requestsand a second disable command to the second release of the service todisable the second release of the service from processing clientrequests.
 10. The system of claim 9, wherein each of the first releaseof the service and the second release of the service are configured toreceive enable commands from the one or more processors while disabledfrom processing client requests.
 11. The system of claim 9, wherein theone or more processors are further configured to communicate one of thefirst enable command or the first disable command responsive toreceiving a poll from one of the first release of the service or thesecond release of the service.
 12. The system of claim 9, wherein theone or more processors are further configured to communicate one of thesecond enable command or the second disable command responsive toreceiving a poll from one of the first release of the service or thesecond release of the service.
 13. The system of claim 9, whereinrequests from clients are directed to one of the first release of theservice or the second release of the service that is enabled.
 14. Thesystem of claim 9, wherein the first release of the service is executedat a first time instance and one of enabled or disabled at a second timeinstance.
 15. The system of claim 9, wherein the second release of theservice is executed at a first time instance and one of enabled ordisabled at a second time instance.
 16. The system of claim 9, whereinthe second release of the service comprises an update to the firstrelease of the service to be tested for issues.
 17. A non-transitorycomputer readable medium storing instructions that, when executed by oneor more processors, cause the one or more processors to: maintain afirst state of a first release of a service and a second state of asecond release of the service in a computing environment, the firstrelease of the service is executing and enabled for processing requestsfrom clients and the second release of the service is executing anddisabled from processing requests from clients; communicate a firstdisable command to the first release of the service and a first enablecommand to the second release of the service determine that the secondrelease of the service is having one or more issues; update the firststate of the first release of the service to be enabled and the secondstate of the second release to be disabled responsive to identifyingthat the second release of the service is having one or more issues; andcommunicate a second enable command to the first release of the serviceto enable the first release of the service to process client requestsand a second disable command to the second release of the service todisable the second release of the service from processing clientrequests.
 18. The non-transitory computer readable medium of claim 17,wherein each of the first release of the service and the second releaseof the service are configured to receive enable commands from the one ormore processors while disabled from processing client requests.
 19. Thenon-transitory computer readable medium of claim 17, wherein the one ormore processors are further configured to communicate one of the firstenable command or the first disable command responsive to receiving apoll from one of the first release of the service or the second releaseof the service.
 20. The non-transitory computer readable medium of claim17, wherein the second release of the service is executed at a firsttime instance and one of enabled or disabled at a second time instance.